package com.dusk.util
{
	import flash.geom.Point;
	
	public final class MathUtil extends UtilBase
	{
		public function MathUtil()
		{
			super();
		}
		
		/**
		 * 取小数位数，类似toFixed，可选择是否取整
		 * <br>原因:</br>
		 * flash自带的保留位数会在一定条件下出现问题，如：Number(0.009).toFixed(2)会得到0；
		 * @param num 目标小数
		 * @param decimal 目标位数
		 * @param isRound 是否四舍五入取整
		 * @return 返回值
		 */
		public static function decimal(num:Number,decimal:int = 2,isRound:Boolean = true):Number
		{
			var digit:int = Math.pow(10,decimal);
			if(isRound)
			{
				return Math.round(num * digit) / digit;
			}
			else
			{
				return Math.floor(num * digit) / digit;
			}
		}
		
		/**
		 * 获取两点间距离
		 * @param rest 传入两个point作为两个参数，或者传入两点坐标(x,y)(x,y)共四个参数
		 * @return 两点间距
		 */
		public static function getDist(... rest):Number
		{
			var p1:Point = null;
			var p2:Point = null;
			if(rest.length == 2 && rest[0] is Point && rest[1] is Point)
			{
				p1 = rest[0];
				p2 = rest[1];
			}
			else if(rest.length == 4)
			{
				p1 = new Point(rest[0],rest[1]);
				p2 = new Point(rest[2],rest[3]);
			}
			if(p1 != null && p2 != null)
			{
				return Math.sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));
			}
			return -1;
		}
		
		/**
		 * 获取两点之间的角度
		 * @param p1 位置1
		 * @param p2 位置2
		 * @return 占比
		 */
		public static function getAngleByTwoPoint(p1:Point,p2:Point):Point
		{
			var dist:int = getDist(p1,p2);
			return new Point((p2.x - p1.x) / dist, (p2.y - p1.y) / dist);
		}
		
		/**
		 * 弧度转角度
		 * @param radians 弧度数
		 * @return
		 */
		public static function radianToDegree(radians:Number):Number
		{
			return radians * 180 / Math.PI
		}
		
		/**
		 * 角度转弧度
		 * @param degree 角度数
		 * @return
		 */
		public static function degreeToRadian(degree:Number):Number
		{
			return degree * Math.PI / 180
		}
	}
}
